# 参数类型
# 1、位置参数，调用时，必须要传递
# 2、关键字参数，关键字参数可以和位置参数混用，必须在位置参数后面
# 3、默认参数
# 4、可变长度参数，例：*args，**kwargs

def print_parameter(name: str, age: int, sex: str, hobby: list, country='CN',
                    *args,
                    **kwargs):
    """
    打印这些参数信息
    :param name:
    :param age:
    :param sex:
    :param hobby:
    :param country:
    :param args: tuple类型，可变长度
    :param kwargs: dict类型，可变长度
    :return:
    """
    print(f'name:{name},age:{age},sex:{sex},hobby:{hobby},country:{country},'
          f'args:{args},*args:', *args,
          f'kwargs:{kwargs}')


print_parameter('wangyk', 18, "male", ["上班"], "China",
                # 这些元素会以 tuple 类型存到 *args 里面
                "args_1", "args_2", "args_3",
                # 这些元素会以 dict 类型存到 **kwargs 里面
                province="广东省", city="深圳市", distinct="宝安区")
print_parameter('lisi', 18, "female", ["上班"])
print_parameter(hobby=["上班"], name='lisi', age=18, sex="female")
print_parameter('lisi', hobby=["上班"], age=18, sex="female")

# 可以使用 *list 传参
parameter_list = ["李四", 20, "female", ['swimming', 'walk'], 'US']
print_parameter(*parameter_list)

# 可以使用 **dict 传参
parameter_dict = {"name": "张三", "age": 21, "sex": "female", "hobby": ["hiking"]}
print_parameter(**parameter_dict)
